package com.forever.volleydemo;

import android.content.Context;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

/**
 * 设计 单例模式,线程安全
 * RequestQueue
 * ImageLoader 
 * @author wy
 *
 */
public class DownLoadTools {
	/**
	 * 下载队列
	 */
	private RequestQueue mQueue;
	/**
	 * 图片下载器
	 */
	private ImageLoader mLoader;
	/**
	 * 上下文
	 */
	private Context context;
	private static DownLoadTools mTools;

	private DownLoadTools(Context context) {

		if (context != null) {
			this.context = context;
			this.mQueue = getRequestQueue();
			this.mLoader = getImageLoader();
		}

	}

	/**
	 * 双检查锁
	 * 因为，保证只new 一个 DownLoadTools对象。
	 * 那么意味着：DownLoadTools 构造函数里面的方法也只执行了一次。
	 * 对应的RequestQueue和ImageLoader也就都是单例了
	 * @param context
	 * @return
	 * DownLoadTools
	 */
	public static DownLoadTools getInstance(Context context) {

		if (mTools == null) {

			synchronized (DownLoadTools.class) {

				if (mTools == null) {
					mTools = new DownLoadTools(context);
				}
			}

		}
		return mTools;
	}

	/**
	 *  
	 * @param context
	 *   上下文
	 * @return
	 * RequestQueue
	 */

	public RequestQueue getRequestQueue() {

		if (mQueue == null) {
			// 使用getApplicationContext保证mQueue的生命周期和APP的一样
			mQueue = Volley.newRequestQueue(context.getApplicationContext());
		}
		return mQueue;

	}

	/**
	 * 
	 * @param context
	 * 上下文
	 * @return
	 * RequestQueue
	 */
	public ImageLoader getImageLoader() {

		if (mLoader == null) {
			mLoader = new ImageLoader(mQueue, new ImageCacheBitmap());
		}

		return mLoader;

	}
}
